這系列我在做一個東西:你用白話問公司規章,它回答你。
「加班三小時怎麼算錢?」「請假沒事先申請會怎樣?」它去翻一份工作規則,
找出相關的那幾條,然後用人話講給你聽。規章是我虛構的,59 條,免得扯到真公司。
做出來之後馬上有個問題:它講的到底對不對?
我一開始真的是自己一題一題讀。讀到後來受不了,就寫了個程式幫我打分數。
做法很笨:每題我先想好「正確答案裡應該會出現哪幾個詞」,程式去 AI 的回答裡找,全部找到就算它答對。
比如問加班費,我設「三分之一」「三分之二」「本薪」三個詞,都出現就打勾。
這個笨方法我用了四天。今天發現,它 40 題裡有 25 題跟我自己讀出來的結論不一樣。
最誇張的是這題。
我問:「颱風宣布停止上班,我改在家上班,那天要不要簽到?」
規章寫得清清楚楚:在家上班算正常出勤,但那天還是要線上簽到。
AI 回答:「該日以正常出勤論,因此當天不需要簽到。」
它答反了。可是我設的關鍵字是「正常出勤」跟「簽到」,這兩個詞在那句話裡都有啊。
程式就打勾了。連續五次都打勾。
差別只在一個「不」字。找關鍵字的程式看不見「不」。
還有反過來的。我問「這個月遲到三次會被記過嗎」,AI 答「會被主管書面提醒,但不會直接記過」。這答得很好。可是我當初把「申誡」也設成必要關鍵字,AI 沒講到那兩個字,程式就判它錯。
但我問的是會不會被記過,它沒有義務把懲處有哪幾種背一遍給我聽。
所以我的程式同時在做兩件蠢事:放過答錯的,還冤枉答對的。
這兩種的後果不一樣。放過答錯的,會讓我以為系統做好了。冤枉答對的,
會讓我跑去修一個根本沒壞的地方。所以後面每張表我都把這兩欄分開。
想換掉這個程式,馬上卡住。
因為我沒辦法用一把壞掉的尺,去量另一把尺。我換個打分數的方法,
分數從 3/8 變成 6/8,那也只是換了一個我同樣不知道準不準的數字。
標準答案只能人去讀。
我有 8 個問題,每個問題我餵給 AI 的條文數量不一樣(1 條、3 條、5 條、10 條、15 條,這是昨天在測的東西),所以總共有 40 個回答。這 40 個要一字一句讀完,每個標成三類:
(先講一件事,免得你讀到一半覺得被騙:這 40 筆最後只有 16 筆是我自己讀的,剩下 24 筆怎麼處理,等一下有一整節在講。)
為什麼要中間那一類?就是前面「會被書面提醒」那題。它一個字都沒講錯,但我問它會不會被記過,它沒回答我。這種東西跟「答反了」放在同一格我不甘願,因為要修的地方完全不同。
開始讀之前我先把規則寫死,寫完才准動手:
第 3 條等一下會打臉我自己。
40 筆我自己讀完標的只有 16 筆。
一筆要讀答案、翻兩條條文、下判斷、再寫一句理由,三五分鐘跑不掉。40 筆就是一整個晚上。而且這批東西只能用一次,題目改了、我調了 AI 的指令,全部作廢,下次再來一個晚上。
我猜很多人的 AI 專案沒在做評估,卡的就是這個,不是沒工具。
所以剩下 24 筆,是我請 Claude 照同一套規則標的。
但這樣有個大洞。一份 AI 標出來的標準答案,再叫 AI 自己說「嗯我同意」,那什麼都沒驗到,你只是問一個很會附和的東西要不要按 Enter。
所以我又找了第三個模型來蒙眼重標。不給它看 Claude 標好的答案,只給它題目、規章原文、跟我那三條規則,叫它自己從頭標一遍,標完才對帳。
(這篇裡總共有三個 AI。被問規章、順便也拿來打分數的是 gpt-4o-mini,比較便宜;幫我標那 24 筆的是 Claude;蒙眼覆核的是 gpt-4o。故意用三個不同的,畢竟同一個模型改自己的考卷那是球員兼裁判。)
24 筆裡,20 筆兩邊一樣。剩 4 筆不一樣,我一筆一筆自己看過。
其中 1 筆是我錯。問加班費怎麼算,AI 給了計算比例、也說了要看工資,只是沒講「工資是指本薪加經常性給與」,我標它不完整。可是我根本沒問工資的定義。我自己寫的第 3 條就是「沒問到的細節不能扣分」,結果第一個犯規的是我。
另外 3 筆我維持原判。有一筆是 AI 答「到職三個月沒有特休假」,來覆核的模型說它錯,理由是規章寫試用期依年資比例計給,沒說沒有。但規章的級距是滿六個月才開始算,三個月按比例算出來就是零。那個模型貴了 16 倍,這題照樣栽。
最後:正確 27 筆、不完整 4 筆、錯誤 9 筆。
底下所有的分數,都是拿去跟這 40 筆對帳算出來的。
除了原本的找關鍵字,我又寫了兩種。
逐項檢查表:先列好這題該講到哪幾件事,然後一件一件去問 AI「答案裡有講到這件事嗎」。一題要問兩到四次。
請 AI 當老師:把題目、規章原文、AI 的回答一起丟給另一個 AI,叫它直接打分數,順便講理由。一題問一次。
三種都去跑那 40 個回答,然後跟我自己標的對帳:
| 打分數的方法 | 跟我判一樣 | 冤枉(我說對、它說錯) | 放過(我說錯、它說對) | 花的錢 |
|---|---|---|---|---|
| 找關鍵字 | 15/40 | 15 | 6 | 0 元 |
| 逐項檢查表 | 28/40 | 9 | 1 | 0.15 元 |
| 請 AI 當老師 | 33/40 | 1 | 4 | 0.19 元 |
我用了四天的那個,40 題裡只有 15 題跟我判得一樣。
我本來以為逐項檢查表會最準,結果它冤枉 9 題,比請 AI 當老師還多冤枉 8 題。
那 9 題不是隨機的,全擠在兩個問題上,而且原因很好笑。
我把檢查項目寫成了否定句。我列的是「到職三個月的員工還沒有特休假」,AI 答「尚未滿六個月,因此沒有特休假」。一模一樣的意思。可是負責核對的 AI判成「相反」。四個回答全部踩同一個坑。
比較陰。我列了一個加分項目:「原則上公司應該在七個工作日內發服務證明書」。AI 回答的是「員工沒交還公司財物的話,公司可以先不發」——這是規章裡的例外條款,它講得完全對。
但核對的 AI 手上只有「檢查項目」跟「答案」這兩段文字,看起來就是一句話在反駁另一句話,所以判「相反」。而我的計分規則寫著,加分項目被判相反就整題算錯。於是四個正確答案一起陪葬。
這兩個毛病都在我寫的那兩行字裡,不在 AI 身上。我知道要去改哪裡。
可是「請 AI 當老師」放過的那 4 題,我就查不到原因了。有一題 AI 答「發證明書跟有沒有交還財物無關」,這直接跟規章打架,它判對,理由寫「並未影響結論的正確性」。
我不知道要改哪一行才能讓它不要這樣想。這件事我到現在還沒答案。
把打分數外包給另一個會出錯的 AI,總得先檢查它。
第一項:同樣的東西問五次,它會不會改口。
我把 AI 的隨機程度調到最低,理論上每次答案該一樣。結果逐項檢查表 8 題全部
五次一致,AI 老師只有 6 題。
這裡我先踩了一個坑。我的程式有「快取」——同樣的問題問第二次,它會直接拿
上次存下來的結果,根本不會真的去問 AI。所以我第一次量出來是 100% 一致。
那是快取很穩定,不是 AI 很穩定。我差點就把它寫成結論。
關掉快取之後還有更難看的。因為前面改了一筆標註,整支程式我重跑了一次,
兩次的檢查結果不一樣:AI 老師第一次 7 題一致,第二次 6 題。其中一題的五次判定,第一次是「錯、不完整、錯、不完整、錯」,第二次變成「不完整、不完整、不完整、錯、不完整」,連哪個答案佔多數都換邊了。
第二項:我自己手寫四種答案餵進去,看它攔不攔得住。
| 我餵的答案 | 應該判 | 找關鍵字 | 檢查表 | AI 老師 |
|---|---|---|---|---|
| 把規章原文整段貼上去 | 正確 | 8/8 | 7/8 | 0/8 |
| 一句話講完的正確答案 | 正確 | 2/8 | 4/8 | 7/8 |
| 正確但又臭又長、夾一堆廢話 | 正確 | 8/8 | 8/8 | 8/8 |
| 跟正確答案只差一個「不」字 | 錯誤 | 6/8 | 8/8 | 7/8 |
第一列就是我昨天做過的檢查。當時我把規章原文貼進去,八題全過,我就放心了。
今天換一把尺,同一列 0/8 全滅,AI 老師八題的理由都是「只是在重複規章,
沒有直接回答問題」。所以昨天那份放心,跟尺準不準沒什麼關係。
第二列最慘。八句簡短又正確的答案,找關鍵字那把殺掉六句。而 AI 平常寫出來的
就是短答案。
第四列有一支我沒自己編,直接拿 AI 昨天寫的那句「因此當天不需要簽到」丟進去。
找關鍵字那把還是放它過關。
第三項:換個位置。 把丟給 AI 老師的兩條規章對調順序,8 題裡有 1 題
分數就變了。逐項檢查表沒這個問題,因為它的檢查項目根本不看規章原文。
還有一項我沒做,先自首:打分數的 AI 跟被打分數的 AI 是同一個模型。
它改自己的考卷會不會手軟,我今天量不到。
昨天在測的是:規章條文餵越多給 AI,它答得越好還是越差?昨天的答案是「餵越多反而越差」。
用新的標準答案重算一次:
| 餵幾條規章 | 昨天發出去的分數 | 我自己讀完標的 |
|---|---|---|
| 1 條 | 1/8 | 4/8 |
| 3 條 | 5/8 | 6/8 |
| 5 條 | 4/8 | 6/8 |
| 10 條 | 5/8 | 6/8 |
| 15 條 | 3/8 | 5/8 |
「餵越多越差」還在,但沒那麼誇張。餵 15 條確實會掉,可是只掉一題,
就是 AI 把「前兩小時加三分之一、第三小時加三分之二」的分段算法,
講成一句錯的「整段加三分之二」。
真正要收回的是中間那段。舊分數是 5、4、5、3,忽上忽下;重標之後是 6、6、6、5,中間平的。昨天那個「餵 5 條會掉、餵 10 條又回來」根本不存在,是我打分數的程式在抖。
還有一格差更多。只餵 1 條的時候舊分數是 1/8,實際上是 4/8。而那 8 題裡面,沒有一題拿到了全部需要的規章。
三種打分數的方法,今天沒有一種可以直接拿來用。
找關鍵字跟我只有 15/40 一樣,這個不用討論了。逐項檢查表冤枉 9 題。AI 老師看起來最好,33/40,但它放過 4 題、問五次有兩題會改口,而且我手寫那句只差一個「不」字的假答案,它也放過一支。
要我選的話我會先留檢查表,理由不是它比較準,是它冤枉的那 9 題我知道錯在哪 —— 就是我自己寫的那兩行字。AI 老師放過的那 4 題我到現在查不出原因。一把尺不準的時候,你至少要看得懂它是怎麼不準的。
另外今天最讓我不舒服的不是任何一個分數,是那個快取。我第一次量「AI 會不會改口」量出 100%,差點就寫成結論了,而那只是因為程式沒真的去問 AI。這種東西不知道還有幾個。
打完這 40 份考卷花 0.34 元,檢查那幾把尺花了 0.75 元。驗尺比打分數還貴一倍。
Day 14 到 17 這筆帳一直是 0 元,因為找關鍵字純粹是文字比對,不用錢。所以我從來沒檢討過它。
最貴的反而是標準答案。那 24 筆換模型重標花了 1.60 元,比整套打分數加三項檢查加起來還貴。不過換個單位這筆帳就翻面了:它買回來的是我不用逐字讀那 24 筆的一個多小時,而那一個多小時我到現在還想不到別的辦法可以省。
明天要把檢查表那兩個毛病修掉,重跑一次看冤枉的 9 題剩幾題。順便換第二個模型來打分數,把今天沒量到的「自己改自己會不會手軟」補上。修得動就留著;修完還是輸給 AI 老師,那檢查表這條路我就認輸。
GitHub:https://github.com/wp900622/TrustRAG(day18_rag/)